/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.





Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/

 

#ifndef KubernetesModel_h
#define KubernetesModel_h

@interface NodeVersion :NSObject

/// 节点版本
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 镜像操作系统
@property (strong,nonatomic,nonnull)  NSString*  imageOs;

/// 版本状态
@property (strong,nonatomic,nonnull)  NSString*  versionStatus;


-(id) initWithVersion:(NSString*) version
    imageOs:(NSString*)imageOs
    versionStatus:(NSString*)versionStatus;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeImage :NSObject

/// 镜像编码
@property (strong,nonatomic,nonnull)  NSString*  code;

/// 虚机镜像id
@property (strong,nonatomic,nonnull)  NSString*  imageId;

/// 镜像操作系统
@property (strong,nonatomic,nonnull)  NSString*  imageOs;

/// 主版本号
@property (strong,nonatomic,nonnull)  NSString*  mainVersion;

/// 内部版本号
@property (strong,nonatomic,nonnull)  NSString*  innerVersion;

/// 可见度
@property (strong,nonatomic,nonnull)  NSNumber*  visibility;


-(id) initWithCode:(NSString*) code
    imageId:(NSString*)imageId
    imageOs:(NSString*)imageOs
    mainVersion:(NSString*)mainVersion
    innerVersion:(NSString*)innerVersion
    visibility:(NSNumber*)visibility;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface AddonConfig :NSObject

/// 组件名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 组件是否开启
@property (strong,nonatomic,nonnull)  NSNumber*  enabled;


-(id) initWithName:(NSString*) name
    enabled:(NSNumber*)enabled;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ValidNodeConfig :NSObject

/// kubernetes node 的版本
@property (strong,nonatomic,nonnull)  NSString*  nodeVersion;

/// 镜像id
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  imageId;


-(id) initWithNodeVersion:(NSString*) nodeVersion
    imageId:(NSArray<NSString*>*)imageId;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeGroupProgress :NSObject

/// 工作节点组 id
@property (strong,nonatomic,nonnull)  NSString*  nodeGroupId;

/// 操作类型, upgrade, downgrade, rollback
@property (strong,nonatomic,nonnull)  NSString*  action;

/// 总工作节点个数
@property (strong,nonatomic,nonnull)  NSNumber*  totalCount;

/// 升级完成工作节点个数
@property (strong,nonatomic,nonnull)  NSNumber*  updatedCount;


-(id) initWithNodeGroupId:(NSString*) nodeGroupId
    action:(NSString*)action
    totalCount:(NSNumber*)totalCount
    updatedCount:(NSNumber*)updatedCount;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface DiskSpec :NSObject

/// 磁盘类型，取值为cloud、local，默认为cloud
@property (strong,nonatomic,nonnull)  NSString*  systemDiskCategory;

/// 云盘系统盘的大小 单位(GB)
@property (strong,nonatomic,nonnull)  NSNumber*  systemDiskSize;

/// 云盘系统盘的类型，支持 hdd.std1,ssd.gp1,ssd.io1
@property (strong,nonatomic,nonnull)  NSString*  systemDiskType;

/// 云盘 iops，仅限 ssd.io1 类型云盘有效
@property (strong,nonatomic,nonnull)  NSNumber*  systemDiskIops;


-(id) initWithSystemDiskCategory:(NSString*) systemDiskCategory
    systemDiskSize:(NSNumber*)systemDiskSize
    systemDiskType:(NSString*)systemDiskType
    systemDiskIops:(NSNumber*)systemDiskIops;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeNetwork :NSObject

/// pod子网的id
@property (strong,nonatomic,nonnull)  NSString*  podSubnetId;

/// node子网的id
@property (strong,nonatomic,nonnull)  NSString*  nodeSubnetId;

/// service子网的id
@property (strong,nonatomic,nonnull)  NSString*  serviceSubnetId;

/// service关联LB的具有公网访问能力的子网id
@property (strong,nonatomic,nonnull)  NSString*  servicePublicSubnetId;

/// node的cidr
@property (strong,nonatomic,nonnull)  NSString*  nodeNetworkCidr;

/// vpc id
@property (strong,nonatomic,nonnull)  NSString*  vpcId;


-(id) initWithPodSubnetId:(NSString*) podSubnetId
    nodeSubnetId:(NSString*)nodeSubnetId
    serviceSubnetId:(NSString*)serviceSubnetId
    servicePublicSubnetId:(NSString*)servicePublicSubnetId
    nodeNetworkCidr:(NSString*)nodeNetworkCidr
    vpcId:(NSString*)vpcId;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface LabelSpec :NSObject

/// key包含两个部分：prefix与name，name是必须的，prefix是可选的。prefix与name分隔用&quot;/&quot;。 
   /// name 可以是字母，数字，[-_.]。长度小于63。prefix：遵循DNS标准（例如：kubernetes.io/），长度不超过253 
   /// [参照](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set)    
   /// 
@property (strong,nonatomic,nonnull)  NSString*  key;

/// 字母，数字,[-_.],长度不超过63
@property (strong,nonatomic,nonnull)  NSString*  value;


-(id) initWithKey:(NSString*) key
    value:(NSString*)value;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface Tag :NSObject

/// Tag键
@property (strong,nonatomic,nonnull)  NSString*  key;

/// Tag值
@property (strong,nonatomic,nonnull)  NSString*  value;


-(id) initWithKey:(NSString*) key
    value:(NSString*)value;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface KubernetesQuota :NSObject

/// 资源类型[kubernetes]
@property (strong,nonatomic,nonnull)  NSString*  resourceType;

/// 可用资源上限
@property (strong,nonatomic,nonnull)  NSNumber*  limit;

/// 已用资源数量
@property (strong,nonatomic,nonnull)  NSNumber*  used;


-(id) initWithResourceType:(NSString*) resourceType
    limit:(NSNumber*)limit
    used:(NSNumber*)used;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MasterAuth :NSObject

/// base64编码，集群的根的public certificate
@property (strong,nonatomic,nonnull)  NSString*  clusterCaCertificate;

/// base64编码，客户端连接集群的public certificate
@property (strong,nonatomic,nonnull)  NSString*  clientCertificate;

/// base64编码, client的私钥
@property (strong,nonatomic,nonnull)  NSString*  clientKey;

/// basic auth的user
@property (strong,nonatomic,nonnull)  NSString*  user;

/// basic auth的password
@property (strong,nonatomic,nonnull)  NSString*  password;


-(id) initWithClusterCaCertificate:(NSString*) clusterCaCertificate
    clientCertificate:(NSString*)clientCertificate
    clientKey:(NSString*)clientKey
    user:(NSString*)user
    password:(NSString*)password;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface KubernetesTagFilter :NSObject

/// Tag键
@property (strong,nonatomic,nonnull)  NSString*  key;

/// Tag值
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  values;


-(id) initWithKey:(NSString*) key
    values:(NSArray<NSString*>*)values;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface UpgradePlan :NSObject

/// 升级方式 auto, manual
@property (strong,nonatomic,nonnull)  NSString*  mode;

/// 升级范围 cluster, master, nodegroup
@property (strong,nonatomic,nonnull)  NSString*  scope;

/// 升级计划状态 waiting, upgrading
@property (strong,nonatomic,nonnull)  NSString*  state;

/// master 期望版本
@property (strong,nonatomic,nonnull)  NSString*  masterExpectedVersion;

/// node 期望版本
@property (strong,nonatomic,nonnull)  NSString*  nodeExpectedVersion;

/// 升级启动时间
@property (strong,nonatomic,nonnull)  NSString*  startTime;

/// 持续时长
@property (strong,nonatomic,nonnull)  NSNumber*  duration;


-(id) initWithMode:(NSString*) mode
    scope:(NSString*)scope
    state:(NSString*)state
    masterExpectedVersion:(NSString*)masterExpectedVersion
    nodeExpectedVersion:(NSString*)nodeExpectedVersion
    startTime:(NSString*)startTime
    duration:(NSNumber*)duration;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MasterProgress :NSObject

/// 操作类型 upgrade,rollback,downgrade 等
@property (strong,nonatomic,nonnull)  NSString*  action;

/// 升级范围, 目前只有三个值：0, 50, 100
@property (strong,nonatomic,nonnull)  NSString*  progress;


-(id) initWithAction:(NSString*) action
    progress:(NSString*)progress;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface AddonConfigSpec :NSObject

/// 组件名称，目前支持customMetrics、logging
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 是否开启该组件，默认为false。
@property (strong,nonatomic,nonnull)  NSNumber*  enabled;


-(id) initWithName:(NSString*) name
    enabled:(NSNumber*)enabled;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MaintenanceWindow :NSObject

/// daily, weekly, monthly， 默认 weekly
@property (strong,nonatomic,nonnull)  NSString*  periodType;

/// 维护操作开始具体日期, 仅对 periodType 取值为 weekly 或 monthly 时有效, periodType 为 weekly 时可以取 1-7, periodType 为 monthly 时可取 1-28
   /// 
@property (strong,nonatomic,nonnull)  NSNumber*  startDay;

/// 维护操作开始具体时间. 时间格式符合RFC3339，并使用 UTC 时间，精确到分钟，例如 23:27
@property (strong,nonatomic,nonnull)  NSString*  startTime;

/// 维护运行时长: 4-24 小时，步长 1 小时， 默认为： 4小时
@property (strong,nonatomic,nonnull)  NSNumber*  duration;


-(id) initWithPeriodType:(NSString*) periodType
    startDay:(NSNumber*)startDay
    startTime:(NSString*)startTime
    duration:(NSNumber*)duration;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MaintenanceWindowSpec :NSObject

/// daily, weekly, monthly， 默认 weekly
@property (strong,nonatomic,nonnull)  NSString*  periodType;

/// 维护操作开始具体日期, 仅对 periodType 取值为 weekly 或 monthly 时有效, periodType 为 weekly 时可以取 1-7, periodType 为 monthly 时可取 1-28
   /// 
@property (strong,nonatomic,nonnull)  NSNumber*  startDay;

/// 维护操作开始具体时间. 时间格式符合RFC3339，并使用 UTC 时间，精确到分钟，例如 23:27
@property (strong,nonatomic,nonnull)  NSString*  startTime;

/// 时区，使用 IANA 数据格式，例如：&quot;Asia/Shanghai&quot; 或 &quot;America/Los_Angeles&quot;，默认 &quot;UTC&quot;
@property (strong,nonatomic,nonnull)  NSString*  timeZone;

/// 维护运行时长: 4-24 小时，步长 1 小时， 默认为： 4小时
@property (strong,nonatomic,nonnull)  NSNumber*  duration;


-(id) initWithPeriodType:(NSString*) periodType
    startDay:(NSNumber*)startDay
    startTime:(NSString*)startTime
    timeZone:(NSString*)timeZone
    duration:(NSNumber*)duration;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface Label :NSObject

/// Key
@property (strong,nonatomic,nonnull)  NSString*  key;

/// Value
@property (strong,nonatomic,nonnull)  NSString*  value;


-(id) initWithKey:(NSString*) key
    value:(NSString*)value;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MasterImage :NSObject

/// 镜像编码
@property (strong,nonatomic,nonnull)  NSString*  code;

/// 虚机镜像id
@property (strong,nonatomic,nonnull)  NSString*  imageId;

/// 主版本号
@property (strong,nonatomic,nonnull)  NSString*  mainVersion;

/// 内部版本号
@property (strong,nonatomic,nonnull)  NSString*  innerVersion;

/// 是否默认镜像
@property (strong,nonatomic,nonnull)  NSNumber*  isDefault;

/// 可见度:0：所有人可见；1：授权用户可见；2：只有白名单用户可见
@property (strong,nonatomic,nonnull)  NSNumber*  visibility;

/// 默认节点镜像编码
@property (strong,nonatomic,nonnull)  NSString*  defaultNodeImageCode;

/// 工作节点镜像
@property (strong,nonatomic,nonnull)  NSArray<NodeImage*>*  nodeImages;


-(id) initWithCode:(NSString*) code
    imageId:(NSString*)imageId
    mainVersion:(NSString*)mainVersion
    innerVersion:(NSString*)innerVersion
    isDefault:(NSNumber*)isDefault
    visibility:(NSNumber*)visibility
    defaultNodeImageCode:(NSString*)defaultNodeImageCode
    nodeImages:(NSArray<NodeImage*>*)nodeImages;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ServerConfig :NSObject

/// kubernetes master 的支持版本
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  validMasterVersions;

/// kubernetes master 的默认版本
@property (strong,nonatomic,nonnull)  NSString*  defaultMasterVersion;

/// node 节点的配置
@property (strong,nonatomic,nonnull)  NSArray<ValidNodeConfig*>*  validNodeConfig;


-(id) initWithValidMasterVersions:(NSArray<NSString*>*) validMasterVersions
    defaultMasterVersion:(NSString*)defaultMasterVersion
    validNodeConfig:(NSArray<ValidNodeConfig*>*)validNodeConfig;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeConfig :NSObject

/// 实例类型
@property (strong,nonatomic,nonnull)  NSString*  instanceType;

/// 镜像信息
@property (strong,nonatomic,nonnull)  NSString*  imageId;

/// 云主机SSH密钥对名称
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  keyNames;

/// 云主机磁盘类型
@property (strong,nonatomic,nonnull)  NSString*  systemDiskCategory;

/// 云主机云盘系统盘大小  单位(GB)
@property (strong,nonatomic,nonnull)  NSNumber*  systemDiskSize;

/// 云主机云盘系统盘类型
@property (strong,nonatomic,nonnull)  NSString*  systemDiskType;

/// 云主机云盘 iops，仅限 ssd 类型云盘有效
@property (strong,nonatomic,nonnull)  NSNumber*  systemDiskIops;

/// 工作节点组标签
@property (strong,nonatomic,nonnull)  NSArray<LabelSpec*>*  labels;


-(id) initWithInstanceType:(NSString*) instanceType
    imageId:(NSString*)imageId
    keyNames:(NSArray<NSString*>*)keyNames
    systemDiskCategory:(NSString*)systemDiskCategory
    systemDiskSize:(NSNumber*)systemDiskSize
    systemDiskType:(NSString*)systemDiskType
    systemDiskIops:(NSNumber*)systemDiskIops
    labels:(NSArray<LabelSpec*>*)labels;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeConfigSpec :NSObject

/// 实例类型
@property (strong,nonatomic,nonnull)  NSString*  instanceType;

/// 工作节点版本，不指定则使用默认版本
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 云主机密码，默认为集群密码，密码规范参考：[公共参数规范](https://docs.jdcloud.com/cn/virtual-machines/api/general_parameters)
@property (strong,nonatomic,nonnull)  NSString*  password;

/// 云主机SSH密钥对名称，当前仅支持一个。使用中的SSH密钥请勿删除。
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  keyNames;

/// 云主机系统盘配置信息
@property (strong,nonatomic,nonnull)  DiskSpec*  systemDisk;

/// 工作节点组标签，最多支持 10 个
@property (strong,nonatomic,nonnull)  NSArray<LabelSpec*>*  labels;


-(id) initWithInstanceType:(NSString*) instanceType
    version:(NSString*)version
    password:(NSString*)password
    keyNames:(NSArray<NSString*>*)keyNames
    systemDisk:(DiskSpec*)systemDisk
    labels:(NSArray<LabelSpec*>*)labels;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface MasterVersion :NSObject

/// 集群版本号
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 是否默认版本
@property (strong,nonatomic,nonnull)  NSNumber*  isDefault;

/// 默认工作节点版本号
@property (strong,nonatomic,nonnull)  NSString*  defaultNodeVersion;

/// 版本状态
@property (strong,nonatomic,nonnull)  NSString*  versionStatus;

/// node 节点的配置
@property (strong,nonatomic,nonnull)  NSArray<NodeVersion*>*  nodeVersions;


-(id) initWithVersion:(NSString*) version
    isDefault:(NSNumber*)isDefault
    defaultNodeVersion:(NSString*)defaultNodeVersion
    versionStatus:(NSString*)versionStatus
    nodeVersions:(NSArray<NodeVersion*>*)nodeVersions;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeGroupSpec :NSObject

/// 名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// Description
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 工作节点组的信息
@property (strong,nonatomic,nonnull)  NodeConfigSpec*  nodeConfig;

/// 工作节点组的 az，必须为集群az的子集，默认为集群az
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  azs;

/// 工作节点组初始化大小，至少为1个
@property (strong,nonatomic,nonnull)  NSNumber*  initialNodeCount;

/// 工作节点组运行的vpc
@property (strong,nonatomic,nonnull)  NSString*  vpcId;

/// 工作节点组的cidr
@property (strong,nonatomic,nonnull)  NSString*  nodeCidr;

/// 是否开启自动修复，默认不开启。
@property (strong,nonatomic,nonnull)  NSNumber*  autoRepair;


-(id) initWithName:(NSString*) name
    descriptionValue:(NSString*)descriptionValue
    nodeConfig:(NodeConfigSpec*)nodeConfig
    azs:(NSArray<NSString*>*)azs
    initialNodeCount:(NSNumber*)initialNodeCount
    vpcId:(NSString*)vpcId
    nodeCidr:(NSString*)nodeCidr
    autoRepair:(NSNumber*)autoRepair;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface NodeGroup :NSObject

/// 集群 id
@property (strong,nonatomic,nonnull)  NSString*  clusterId;

/// 工作节点组 id
@property (strong,nonatomic,nonnull)  NSString*  nodeGroupId;

/// 工作节点组名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 工作节点组描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 工作节点组配置信息
@property (strong,nonatomic,nonnull)  NodeConfig*  nodeConfig;

/// 工作节点版本
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 工作节点所属的网络信息
@property (strong,nonatomic,nonnull)  NodeNetwork*  nodeNetwork;

/// 当前工作节点数量
@property (strong,nonatomic,nonnull)  NSNumber*  currentCount;

/// 期望的工作节点数量
@property (strong,nonatomic,nonnull)  NSNumber*  expectCount;

/// 工作节点组的ag id ，通过agid可以查询该工作节点组下的实例
@property (strong,nonatomic,nonnull)  NSString*  agId;

/// 工作节点组所在的 az
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  azs;

/// 工作节点组的 ag 对应的实例模板
@property (strong,nonatomic,nonnull)  NSString*  instanceTemplateId;

/// 状态  [pending,running,resizing,reconciling,deleting,deleted,error,running_with_error(部分节点有问题)]
@property (strong,nonatomic,nonnull)  NSString*  state;

/// Tags
@property (strong,nonatomic,nonnull)  NSArray<Tag*>*  tags;

/// 更新时间
@property (strong,nonatomic,nonnull)  NSString*  updateTime;

/// 状态变更原因
@property (strong,nonatomic,nonnull)  NSString*  stateMessage;

/// 是否开启自动修复
@property (strong,nonatomic,nonnull)  NSNumber*  autoRepair;

/// 控制节点操作进度
@property (strong,nonatomic,nonnull)  NodeGroupProgress*  progress;

/// 创建时间
@property (strong,nonatomic,nonnull)  NSString*  createdTime;


-(id) initWithClusterId:(NSString*) clusterId
    nodeGroupId:(NSString*)nodeGroupId
    name:(NSString*)name
    descriptionValue:(NSString*)descriptionValue
    nodeConfig:(NodeConfig*)nodeConfig
    version:(NSString*)version
    nodeNetwork:(NodeNetwork*)nodeNetwork
    currentCount:(NSNumber*)currentCount
    expectCount:(NSNumber*)expectCount
    agId:(NSString*)agId
    azs:(NSArray<NSString*>*)azs
    instanceTemplateId:(NSString*)instanceTemplateId
    state:(NSString*)state
    tags:(NSArray<Tag*>*)tags
    updateTime:(NSString*)updateTime
    stateMessage:(NSString*)stateMessage
    autoRepair:(NSNumber*)autoRepair
    progress:(NodeGroupProgress*)progress
    createdTime:(NSString*)createdTime;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface ClusterSpec :NSObject

/// 名称（同一用户的 cluster 允许重名）
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// 默认开启 basicAuth与clientCertificate最少选择一个
@property (strong,nonatomic,nonnull)  NSNumber*  basicAuth;

/// 默认开启 basicAuth与clientCertificate最少选择一个
@property (strong,nonatomic,nonnull)  NSNumber*  clientCertificate;

/// kubernetes的版本,默认1.8
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 集群所在的az
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  azs;

/// 实例组
@property (strong,nonatomic,nonnull)  NodeGroupSpec*  nodeGroup;

/// k8s的master的cidr
@property (strong,nonatomic,nonnull)  NSString*  masterCIDR;

/// 用户的AccessKey，插件调用open-api时的认证凭证
@property (strong,nonatomic,nonnull)  NSString*  accessKey;

/// 用户的SecretKey，插件调用open-api时的认证凭证
@property (strong,nonatomic,nonnull)  NSString*  secretKey;


-(id) initWithName:(NSString*) name
    descriptionValue:(NSString*)descriptionValue
    basicAuth:(NSNumber*)basicAuth
    clientCertificate:(NSNumber*)clientCertificate
    version:(NSString*)version
    azs:(NSArray<NSString*>*)azs
    nodeGroup:(NodeGroupSpec*)nodeGroup
    masterCIDR:(NSString*)masterCIDR
    accessKey:(NSString*)accessKey
    secretKey:(NSString*)secretKey;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end
@interface Cluster :NSObject

/// 集群id
@property (strong,nonatomic,nonnull)  NSString*  clusterId;

/// 名称
@property (strong,nonatomic,nonnull)  NSString*  name;

/// 描述
@property (strong,nonatomic,nonnull)  NSString*  descriptionValue;

/// kubernetes的版本
@property (strong,nonatomic,nonnull)  NSString*  version;

/// 集群所在的az
@property (strong,nonatomic,nonnull)  NSArray<NSString*>*  azs;

/// 节点组列表
@property (strong,nonatomic,nonnull)  NSArray<NodeGroup*>*  nodeGroups;

/// k8s的cluster的cidr
@property (strong,nonatomic,nonnull)  NSString*  clusterCidr;

/// 认证信息
@property (strong,nonatomic,nonnull)  MasterAuth*  masterAuth;

/// 状态  [pending,running,reconciling（升级时的状态）, deleting, deleted, error]
@property (strong,nonatomic,nonnull)  NSString*  clusterState;

/// 状态变更原因
@property (strong,nonatomic,nonnull)  NSString*  stateMessage;

/// 更新时间
@property (strong,nonatomic,nonnull)  NSString*  updateTime;

/// 创建时间
@property (strong,nonatomic,nonnull)  NSString*  createTime;

/// 用户的AccessKey，插件调用open-api时的认证凭证
@property (strong,nonatomic,nonnull)  NSString*  accessKey;

/// 基本验证方式
@property (strong,nonatomic,nonnull)  NSNumber*  basicAuth;

/// 证书验证方式
@property (strong,nonatomic,nonnull)  NSNumber*  clientCertificate;

/// 用户访问的ip
@property (strong,nonatomic,nonnull)  NSString*  endpoint;

/// endpoint的port
@property (strong,nonatomic,nonnull)  NSString*  endpointPort;

/// endpoint的dashboard port
@property (strong,nonatomic,nonnull)  NSString*  dashboardPort;

/// deprecated 优先以addonsConfig中的配置为准 &lt;br&gt;用户是否启用集群自定义监控，true 表示开启用，false 表示未开启用
@property (strong,nonatomic,nonnull)  NSNumber*  userMetrics;

/// 集群组件配置信息
@property (strong,nonatomic,nonnull)  NSArray<AddonConfig*>*  addonsConfig;

/// 是否开启集群自动升级，true 表示开启，false 表示未开启
@property (strong,nonatomic,nonnull)  NSNumber*  autoUpgrade;

/// 配置集群维护策略
@property (strong,nonatomic,nonnull)  MaintenanceWindow*  maintenanceWindow;

/// 集群升级计划信息, 仅展示最新一条升级计划信息
@property (strong,nonatomic,nonnull)  UpgradePlan*  upgradePlan;

/// 控制节点操作进度
@property (strong,nonatomic,nonnull)  MaintenanceWindow*  masterProgress;


-(id) initWithClusterId:(NSString*) clusterId
    name:(NSString*)name
    descriptionValue:(NSString*)descriptionValue
    version:(NSString*)version
    azs:(NSArray<NSString*>*)azs
    nodeGroups:(NSArray<NodeGroup*>*)nodeGroups
    clusterCidr:(NSString*)clusterCidr
    masterAuth:(MasterAuth*)masterAuth
    clusterState:(NSString*)clusterState
    stateMessage:(NSString*)stateMessage
    updateTime:(NSString*)updateTime
    createTime:(NSString*)createTime
    accessKey:(NSString*)accessKey
    basicAuth:(NSNumber*)basicAuth
    clientCertificate:(NSNumber*)clientCertificate
    endpoint:(NSString*)endpoint
    endpointPort:(NSString*)endpointPort
    dashboardPort:(NSString*)dashboardPort
    userMetrics:(NSNumber*)userMetrics
    addonsConfig:(NSArray<AddonConfig*>*)addonsConfig
    autoUpgrade:(NSNumber*)autoUpgrade
    maintenanceWindow:(MaintenanceWindow*)maintenanceWindow
    upgradePlan:(UpgradePlan*)upgradePlan
    masterProgress:(MaintenanceWindow*)masterProgress;
-(NSMutableDictionary*) dictionary;

-(id) initWithDic:(NSDictionary*)dictionary;                    
@end

#endif /* KubernetesModel_h */
